package com.yuw.basedemo;

/**
 * java基础语法测试类
 *
 * @author yuw
 */
public class TestDriver {
    /**
     * main方法
     *
     * @param args 输入参数
     */
    public static void main(String[] args) {
        // java数据类型测试
        test01();
        System.out.println("=================================================");
        test02();
        System.out.println("=================================================");
        test03();
        System.out.println("=================================================");
        test04();
        System.out.println("=================================================");
        test05();

    }

    /**
     * 运算符：逻辑运算短路
     */
    public static void test05() {
        // 验证逻辑运算短路
        int iVal1 = 1;
        int iVal2 = 2;
        int iVal3 = 3;
        int iVal4 = 4;
        boolean isOk = iVal1++ >= iVal2-- && iVal3++ <= --iVal4; // 如果 iVal3 = 3 iVal4=4 则说明 && 后面没有进行运算
        System.out.println("isOK=" + isOk);
        System.out.println("iVal1=" + iVal1);
        System.out.println("iVal2=" + iVal2);
        System.out.println("iVal3=" + iVal3);
        System.out.println("iVal4=" + iVal4);
    }

    /**
     * 运算符：自增自减算符
     */
    public static void test04() {
        int iVal1 = 1;
        int iVal2 = 2;

        // 运算
        int iVal3 = ++iVal1 + iVal2--;
        System.out.println("iVal1=" + iVal1);
        System.out.println("iVal2=" + iVal2);
        System.out.println("iVal3=" + iVal3);
    }

    /**
     * 运算符：位运算符
     */
    public static void test03() {
        int iVal0 = 1; // 0000 0001
        int iVal1 = ~iVal0; // 1111 1110 [补码--计算机] --> [原码--人] 1000 0010  -2
        System.out.println("iVal1=" + iVal1);

        int iVal11 = -128;
        int iVal12 = iVal11 >>> 2;
        int iVal13 = iVal11 << 2;
        System.out.println("iVal12=" + iVal12);
        System.out.println("iVal13=" + iVal13);
    }

    /**
     * 运算符：算术运算符
     */
    public static void test02() {
        int iVal0 = 5;
        int iVal1 = 3;
        int iVal2 = iVal0 / iVal1; // 1  1.66 小数部分被舍弃
        System.out.println("iVal0 / iVal1=" + iVal2);
        System.out.println("--------保留小数点--------");
        double iVal3 = iVal0 * 1.0 / iVal1; // 1  1.66 小数部分被舍弃
        System.out.println("iVal0 / iVal1=" + iVal3);
    }

    /**
     * java数据类型
     */
    public static void test01() {
        // 声明变量、初始化
        int val0 = 1;
        byte bVal0 = 1;
        short sVal0 = 2;
        char chVal = 92;
        short sVal1 = 2;
        // 如果一个表达式中有 char byte short 三种类型及其组合，则表达式的运行结果的类型为int
        int iVal = bVal0 + sVal0 + chVal;
        // 两个short类型的运算结果是int类型；同理两个char 或者两个 byte 类型的运算结果也是int类型；
        int sVal2 = sVal0 + sVal1;

        int iVal3 = 100;
        // 整数的默认类型为int类型，如果类型时 byte char short 时，整数的大小在类型的表示范围只能，则不需要强制类型转换，
        // 如果在类型的表示范围之外，则需要进行强制类型转换；
        byte sVal4 = (byte) 128;

        long iVal4 = 100000000000L;

        int iVal5 = sVal0;

        sVal0 = (short) iVal5;

        System.out.println("-----------------------");
        // long和float类型，那个类型表示的范围大？ float范围大。为什么？
        // 需要使用包装类类型，后面讲完面向对象之后再讲
        System.out.println("long类型的最大值：" + Long.MAX_VALUE);
        System.out.println("float类型的最大值：" + Float.MAX_VALUE);

        System.out.println("---------------------------");
        char c = 'A';    // 大写字母
        int num = c;    // 需要将字符变为int型才可以使用加法计算
        num = num + ('a' - 'A');    // 变为小写字母的编码
        c = (char) num;    // 将int变为char型
        System.out.println(c);

    }
}
